package com.zyl.pts.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zyl.pts.domain.bean.Animal;
import com.zyl.pts.domain.dto.AnimalDTO.AnimalUpdateOrAddDTO;
import com.zyl.pts.domain.vo.AnimalVO.BaseInfoAnimalPageVO;
import com.zyl.pts.domain.vo.AnimalVO.BaseInfoAnimalVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @version v1.0
 * @ProjectName: product_source
 * @Package: com.zyl.pts.mapper
 * @ClassName: AnimalMapper
 * @Description TODO()
 * @Author 翟玉龙
 * @Date 2024/11/20-8:33
 */
@Mapper
public interface AnimalMapper extends BaseMapper<Animal> {

    /**
     * 根据动物编号查询动物是否存在
     * @param animalId 动物编号
     * @return int
     */
    int existsById(String animalId);

    /**
     * 根据动物编号查询动物信息
     * @param animalId 动物编号
     * @return {@link Animal }
     */
    Animal queryById(String animalId);

    /**
     * 单独查找栏舍ID
     * @param animalId 动物编号
     * @return {@link String }
     */
    String queryHurdlesId(String animalId);

    /**
     * 根据动物编号列表查询动物信息
     * @param animalIdList 动物编号列表
     * @return {@link List }<{@link BaseInfoAnimalVO }>
     */
    List<Animal> queryAnimalInfoByIdList(List<String> animalIdList);

    /**
     * 根据动物编号查询动物基本信息
     * @param animalId 动物编号
     * @return {@link BaseInfoAnimalVO }
     */
    BaseInfoAnimalVO queryAnimalInfoById(String animalId);

    /**
     * 分页并根据条件查询动物基本信息以及对应批次和栏圈信息
     * @param aHealthy 动物健康状况
     * @param aGender 动物性别
     * @return {@link List }<{@link BaseInfoAnimalVO }>
     */
    List<BaseInfoAnimalPageVO> queryAnimalInfoByPage(@Param("aHealthy") String aHealthy, @Param("aGender") String aGender);

    /**
     * 新增动物
     * @param animalUpdateOrAddDTO 动物信息
     * @return int
     */
    int insertAnimal(AnimalUpdateOrAddDTO animalUpdateOrAddDTO);

    /**
     * 根据动物编号更新动物信息
     * @param animalUpdateOrAddDTO 动物信息
     * @return int
     */
    int updateAnimal(AnimalUpdateOrAddDTO animalUpdateOrAddDTO);

    /**
     * 根据动物编号（已存在）有选择修改指定数据
     * @param aWeight 动物体重
     * @param aHealthy 动物健康状况
     * @return int
     */
    int updateAnimalSelective(@Param("aWeight") String aWeight,
                              @Param("aHealthy") String aHealthy,
                              @Param("aAnimalId") String aAnimalId);

    /**
     * 根据动物编号删除动物信息
     * @param animalId 动物编号
     * @return int
     */
    int deleteAnimalById(String animalId);

    /**
     * 根据动物编号列表批量删除
     * @param animalIds 动物编号列表
     * @return int
     */
    int deleteAnimalByIds(List<String> animalIds);


}
